home *** CD-ROM | disk | FTP | other *** search
/ PC Elektro 3 / PC-Elektro-3-cd1.bin / KBan 2.0 / KBANSRC.LZH / SRC / PROG / CMD / STDIVIDE.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-07  |  2.7 KB  |  114 lines

  1. /*
  2.  * the class STAGE_DIVIDE_CORE
  3.  * Copyright (C) 1996, 1997 Kazutaka Hirata <khirata@jove.acs.unt.edu>
  4.  */
  5.  
  6. #include "../stdafx.h"
  7.  
  8. #include "../common/bool.h"
  9.  
  10. #include "stdivide.h"
  11.  
  12. void STAGE_DIVIDE_CORE::erase_selected_line(KBAN_DRAW& draw)
  13. {
  14.   draw.erase_primitive_line(*m_target);
  15. }
  16.  
  17. void STAGE_DIVIDE_CORE::redraw_selected_line(KBAN_DRAW& draw)
  18. {
  19.   draw.draw_primitive_line(*m_target, m_old_active_layer);
  20. }
  21.  
  22. STAGE_DIVIDE_CORE::STAGE_DIVIDE_CORE(LINE_ELEMENT* target, uint layer)
  23.   : m_target(target),
  24.     m_old_active_layer(layer),
  25.     m_mcur(*target),
  26.     m_moved(FALSE),
  27.     m_pc_old()
  28. {
  29. }
  30.  
  31. STAGE_DIVIDE_CORE::STAGE_DIVIDE_CORE(LINE_ELEMENT* target, uint layer, const XY& pc_old)
  32.   : m_target(target),
  33.     m_old_active_layer(layer),
  34.     m_mcur(*target),
  35.     m_moved(TRUE),
  36.     m_pc_old(pc_old)
  37. {
  38. }
  39.  
  40. STAGE* STAGE_DIVIDE_CORE::init(KBAN_INFO& info, KBAN_DRAW& draw)
  41. {
  42.   info.bCaptured() = true;
  43.   erase_selected_line(draw);
  44.   if(m_moved.get()) {
  45.     mouse_move(info, draw, m_pc_old, 0);
  46.   } else {
  47.     m_mcur.redraw_cursor(draw);
  48.   }
  49.   return this;
  50. }
  51.  
  52. STAGE* STAGE_DIVIDE_CORE::redraw(KBAN_INFO& info, KBAN_DRAW& draw)
  53. {
  54.   erase_selected_line(draw);
  55.   m_mcur.redraw_cursor(draw);
  56.   return this;
  57. }
  58.  
  59. STAGE* STAGE_DIVIDE_CORE::mouse_move(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
  60. {
  61.   m_moved.set(TRUE);
  62.   m_pc_old = pc;
  63.  
  64.   XY ac;
  65.   info.grid().xy_pc2ac(pc, ac);
  66.   m_mcur.draw_cursor(draw, ac);
  67.   return this;
  68. }
  69.  
  70. // This function is to be overridden but still need to be called.
  71.  
  72. STAGE* STAGE_DIVIDE_CORE::mouse_left_up(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
  73. {
  74.   m_mcur.erase_cursor(draw);
  75.   XY ac;
  76.   info.grid().xy_pc2ac(pc, ac);
  77.  
  78.   PRIMITIVE& primitive = info.kban_data().primitive();
  79.   LINE_LIST& line_list = primitive.layer(info.active_layer().get()).line_list();
  80.  
  81.   LINE_ELEMENT l1(ac, m_target->ac_s(), m_target->width());
  82.   line_list.push_back(l1);
  83.   draw.draw_primitive_line(l1, m_old_active_layer);
  84.  
  85.   LINE_ELEMENT l2(ac, m_target->ac_e(), m_target->width());
  86.   line_list.push_back(l2);
  87.   draw.draw_primitive_line(l2, m_old_active_layer);
  88.  
  89.   line_list.delete_one(m_target);
  90.  
  91.   info.SetModifiedFlag();
  92.   info.new_state().set(true);
  93.   info.new_state_str() = "Divide";
  94.  
  95.   m_done.set(TRUE);
  96.   return NULL;
  97. }
  98.  
  99. // This function is to be overridden but still need to be called.
  100.  
  101. STAGE* STAGE_DIVIDE_CORE::mouse_right_up(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
  102. {
  103.   return NULL;
  104. }
  105.  
  106. void STAGE_DIVIDE_CORE::end(KBAN_INFO& info, KBAN_DRAW& draw)
  107. {
  108.   info.bCaptured() = false;
  109.   if(!m_done.get()) {
  110.     m_mcur.erase_cursor(draw);
  111.     redraw_selected_line(draw);
  112.   }
  113. }
  114.